
#ifndef _ARMESECONDAIRE_H_
#define _ARMESECONDAIRE_H_

#include "Tir.h"


/** @brief File brief description
    Le fichier ArmeSecondaire.h contient la declaration de toutes les fonctions et procédures nécessaires
    pour fournir au heros une arme secondaire correctement paramétrée*/

typedef enum {gros_missile,onde_de_choc} TypeArmeSecondaire;

/** @brief Une arme secondaire possède un type, un nombre de munitions pour chaque type et
 *  les dégats associés*/
typedef struct 
{
	TypeArmeSecondaire type_arme_secondaire;
	int munition_secondaire;
	int degat_arme_secondaire;
} ArmeSecondaire;


/** @brief Cette procédure initialise une arme principale en restaurant ses
 *  munitions et son niveau de dégat à leurs valeurs initiales
 *  @param [in,out] parme_secondaire
    @return none*/
void initArmeSecondaire (ArmeSecondaire* parme_secondaire, int type);


/** @brief Cette fonction  réserve dans le tas l'espace nécessaire pour une arme secondaire,
 *  l'initialise et retourne un pointeur sur l'arme secondaire créé
    @param none
    @return none*/
ArmeSecondaire* creerArmeSecondaire (int type);


/** @brief Cette procédure libère l'espace memoire alloué dans le tas pour une arme secondaire
 *  @param [in,out] pparme_secondaire
    @return none*/
void detruireArmeSecondaire (ArmeSecondaire** pparme_secondaire);


/** @brief Cette fonction retourne les munitions restantes d'une arme secondaire
    @param [in,out] parme_secondaire
    @return parme_secondaire->munition_secondaire*/
int getMunitions (const ArmeSecondaire* parme_secondaire);


/** @brief Cette procédure permet de changer le nombre de munitions d'une arme secondaire en fournissant
 *  une nouvelle valeur en donnée
 *  @param [in,out] parme_secondaire
 *  @param [in] munition_second
    @return none*/
void setMunitions (ArmeSecondaire* parme_secondaire, const int munition_second);


/** @brief Cette fonction retourne le niveau de dégat d'une arme secondaire
 *  @param [in,out] parme_secondaire
    @return parme_secondaire->degat_arme_secondaire*/
int getDegatArmeSecondaire (const ArmeSecondaire* parme_secondaire);


/** @brief Cette procédure permet de changer le niveau de degat d'une arme secondaire en fournissant
 *  une nouvelle valeur en donnée
 *  @param [in,out] parme_secondaire
 *  @param [in] degat
    @return none*/
void setDegatArmeSecondaire (ArmeSecondaire* parme_secondaire, const int degat);

#endif
